/******************************************************************************* * Copyright (c) 2000, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ant.tests.ui.editor.performance; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.jobs.IJobManager; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.text.IDocument; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; /** * @since 3.1 */ public class EditorTestHelper { public static IEditorPart openInEditor(IFile file, boolean runEventLoop) throws PartInitException { IEditorPart part = IDE.openEditor(getActivePage(), file); if (runEventLoop) runEventQueue(part); return part; } public static IEditorPart openInEditor(IFile file, String editorId, boolean runEventLoop) throws PartInitException { IEditorPart part = IDE.openEditor(getActivePage(), file, editorId); if (runEventLoop) runEventQueue(part); return part; } public static IDocument getDocument(ITextEditor editor) { IDocumentProvider provider = editor.getDocumentProvider(); IEditorInput input = editor.getEditorInput(); return provider.getDocument(input); } public static void revertEditor(ITextEditor editor, boolean runEventQueue) { editor.doRevertToSaved(); if (runEventQueue) runEventQueue(editor); } public static void closeAllEditors() { IWorkbenchPage page = getActivePage(); if (page != null) page.closeAllEditors(false); } public static void runEventQueue() { IWorkbenchWindow window = getActiveWorkbenchWindow(); if (window != null) runEventQueue(window.getShell()); } public static void runEventQueue(IWorkbenchPart part) { runEventQueue(part.getSite().getShell()); } public static void runEventQueue(Shell shell) { while (shell.getDisplay().readAndDispatch()) { // XXX do nothing, just spin the loop } } public static void runEventQueue(long minTime) { long nextCheck = System.currentTimeMillis() + minTime; while (System.currentTimeMillis() < nextCheck) { runEventQueue(); sleep(1); } } public static IWorkbenchWindow getActiveWorkbenchWindow() { return PlatformUI.getWorkbench().getActiveWorkbenchWindow(); } public static IWorkbenchPage getActivePage() { IWorkbenchWindow window = getActiveWorkbenchWindow(); return window != null ? window.getActivePage() : null; } public static Display getActiveDisplay() { IWorkbenchWindow window = getActiveWorkbenchWindow(); return window != null ? window.getShell().getDisplay() : null; } public static boolean calmDown(long minTime, long maxTime, long intervalTime) { long startTime = System.currentTimeMillis() + minTime; runEventQueue(); while (System.currentTimeMillis() < startTime) runEventQueue(intervalTime); long endTime = maxTime > 0 ? System.currentTimeMillis() + maxTime : Long.MAX_VALUE; boolean calm = isCalm(); while (!calm && System.currentTimeMillis() < endTime) { runEventQueue(intervalTime); calm = isCalm(); } // System.out.println("--------------------------------------------------"); return calm; } public static void sleep(int intervalTime) { try { Thread.sleep(intervalTime); } catch (InterruptedException e) { e.printStackTrace(); } } public static boolean isCalm() { IJobManager jobManager = Job.getJobManager(); Job[] jobs = jobManager.find(null); for (int i = 0; i < jobs.length; i++) { Job job = jobs[i]; int state = job.getState(); // System.out.println(job.getName() + ": " + getStateName(state)); if (state == Job.RUNNING || state == Job.WAITING) { // System.out.println(); return false; } } // System.out.println(); return true; } public static void bringToTop() { getActiveWorkbenchWindow().getShell().forceActive(); } }